home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Freeware / Adobe Air 1.5 / AdobeAIRInstaller.exe / setup.swf / scripts / mx / managers / dragClasses / DragProxy.as
Encoding:
Text File  |  2008-10-29  |  12.2 KB  |  362 lines

  1. package mx.managers.dragClasses
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.DisplayObjectContainer;
  5.    import flash.display.InteractiveObject;
  6.    import flash.events.Event;
  7.    import flash.events.KeyboardEvent;
  8.    import flash.events.MouseEvent;
  9.    import flash.geom.Point;
  10.    import mx.core.DragSource;
  11.    import mx.core.IUIComponent;
  12.    import mx.core.UIComponent;
  13.    import mx.core.mx_internal;
  14.    import mx.effects.Move;
  15.    import mx.effects.Zoom;
  16.    import mx.events.DragEvent;
  17.    import mx.events.EffectEvent;
  18.    import mx.managers.CursorManager;
  19.    import mx.managers.DragManager;
  20.    import mx.managers.ISystemManager;
  21.    import mx.styles.CSSStyleDeclaration;
  22.    import mx.styles.StyleManager;
  23.    
  24.    use namespace mx_internal;
  25.    
  26.    public class DragProxy extends UIComponent
  27.    {
  28.       mx_internal static const VERSION:String = "3.0.0.0";
  29.       
  30.       public var allowMove:Boolean = true;
  31.       
  32.       private var cursorClass:Class = null;
  33.       
  34.       public var action:String;
  35.       
  36.       public var target:IUIComponent = null;
  37.       
  38.       public var dragInitiator:IUIComponent;
  39.       
  40.       private var lastMouseEvent:MouseEvent;
  41.       
  42.       public var yOffset:Number;
  43.       
  44.       public var dragSource:DragSource;
  45.       
  46.       private var cursorID:int = 0;
  47.       
  48.       public var xOffset:Number;
  49.       
  50.       public var startX:Number;
  51.       
  52.       public var startY:Number;
  53.       
  54.       private var lastKeyEvent:KeyboardEvent;
  55.       
  56.       public function DragProxy(param1:IUIComponent, param2:DragSource)
  57.       {
  58.          super();
  59.          this.dragInitiator = param1;
  60.          this.dragSource = param2;
  61.          var _loc3_:ISystemManager = param1.systemManager.topLevelSystemManager;
  62.          _loc3_.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler,true);
  63.          _loc3_.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,true);
  64.          _loc3_.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  65.          _loc3_.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
  66.       }
  67.       
  68.       public function mouseUpHandler(param1:MouseEvent) : void
  69.       {
  70.          var _loc2_:DragEvent = null;
  71.          var _loc5_:Point = null;
  72.          var _loc6_:Move = null;
  73.          var _loc7_:Zoom = null;
  74.          var _loc8_:Move = null;
  75.          var _loc3_:ISystemManager = dragInitiator.systemManager.topLevelSystemManager;
  76.          _loc3_.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler,true);
  77.          stage.removeEventListener(MouseEvent.MOUSE_MOVE,stage_mouseMoveHandler);
  78.          _loc3_.removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,true);
  79.          _loc3_.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  80.          stage.removeEventListener(Event.MOUSE_LEAVE,mouseLeaveHandler);
  81.          _loc3_.removeEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
  82.          var _loc4_:Object = automationDelegate;
  83.          if(Boolean(target) && action != DragManager.NONE)
  84.          {
  85.             _loc2_ = new DragEvent(DragEvent.DRAG_DROP);
  86.             _loc2_.dragInitiator = dragInitiator;
  87.             _loc2_.dragSource = dragSource;
  88.             _loc2_.action = action;
  89.             _loc2_.ctrlKey = param1.ctrlKey;
  90.             _loc2_.altKey = param1.altKey;
  91.             _loc2_.shiftKey = param1.shiftKey;
  92.             _loc5_ = new Point();
  93.             _loc5_.x = lastMouseEvent.localX;
  94.             _loc5_.y = lastMouseEvent.localY;
  95.             _loc5_ = DisplayObject(lastMouseEvent.target).localToGlobal(_loc5_);
  96.             _loc5_ = DisplayObject(target).globalToLocal(_loc5_);
  97.             _loc2_.localX = _loc5_.x;
  98.             _loc2_.localY = _loc5_.y;
  99.             if(_loc4_)
  100.             {
  101.                _loc4_.recordAutomatableDragDrop(target,_loc2_);
  102.             }
  103.             target.dispatchEvent(_loc2_);
  104.          }
  105.          else
  106.          {
  107.             action = DragManager.NONE;
  108.          }
  109.          if(action == DragManager.NONE)
  110.          {
  111.             _loc6_ = new Move(this);
  112.             _loc6_.addEventListener(EffectEvent.EFFECT_END,effectEndHandler);
  113.             _loc6_.xFrom = x;
  114.             _loc6_.yFrom = y;
  115.             _loc6_.xTo = startX;
  116.             _loc6_.yTo = startY;
  117.             _loc6_.duration = 200;
  118.             _loc6_.play();
  119.          }
  120.          else
  121.          {
  122.             _loc7_ = new Zoom(this);
  123.             _loc7_.zoomWidthFrom = _loc7_.zoomHeightFrom = 1;
  124.             _loc7_.zoomWidthTo = _loc7_.zoomHeightTo = 0;
  125.             _loc7_.duration = 200;
  126.             _loc7_.play();
  127.             _loc8_ = new Move(this);
  128.             _loc8_.addEventListener(EffectEvent.EFFECT_END,effectEndHandler);
  129.             _loc8_.xFrom = x;
  130.             _loc8_.yFrom = this.y;
  131.             _loc8_.xTo = parent.mouseX;
  132.             _loc8_.yTo = parent.mouseY;
  133.             _loc8_.duration = 200;
  134.             _loc8_.play();
  135.          }
  136.          _loc2_ = new DragEvent(DragEvent.DRAG_COMPLETE);
  137.          _loc2_.dragInitiator = dragInitiator;
  138.          _loc2_.dragSource = dragSource;
  139.          _loc2_.relatedObject = InteractiveObject(target);
  140.          _loc2_.action = action;
  141.          _loc2_.ctrlKey = param1.ctrlKey;
  142.          _loc2_.altKey = param1.altKey;
  143.          _loc2_.shiftKey = param1.shiftKey;
  144.          dragInitiator.dispatchEvent(_loc2_);
  145.          if(Boolean(_loc4_) && action == DragManager.NONE)
  146.          {
  147.             _loc4_.recordAutomatableDragCancel(dragInitiator,_loc2_);
  148.          }
  149.          cursorManager.removeCursor(cursorID);
  150.          cursorID = CursorManager.NO_CURSOR;
  151.          this.lastMouseEvent = null;
  152.       }
  153.       
  154.       public function showFeedback() : void
  155.       {
  156.          var _loc1_:Class = cursorClass;
  157.          var _loc2_:CSSStyleDeclaration = StyleManager.getStyleDeclaration("DragManager");
  158.          if(action == DragManager.COPY)
  159.          {
  160.             _loc1_ = _loc2_.getStyle("copyCursor");
  161.          }
  162.          else if(action == DragManager.LINK)
  163.          {
  164.             _loc1_ = _loc2_.getStyle("linkCursor");
  165.          }
  166.          else if(action == DragManager.NONE)
  167.          {
  168.             _loc1_ = _loc2_.getStyle("rejectCursor");
  169.          }
  170.          else
  171.          {
  172.             _loc1_ = _loc2_.getStyle("moveCursor");
  173.          }
  174.          if(_loc1_ != cursorClass)
  175.          {
  176.             cursorClass = _loc1_;
  177.             if(cursorID != CursorManager.NO_CURSOR)
  178.             {
  179.                cursorManager.removeCursor(cursorID);
  180.             }
  181.             cursorID = cursorManager.setCursor(cursorClass,2,0,0);
  182.          }
  183.       }
  184.       
  185.       override public function initialize() : void
  186.       {
  187.          super.initialize();
  188.          stage.addEventListener(MouseEvent.MOUSE_MOVE,stage_mouseMoveHandler);
  189.          stage.addEventListener(Event.MOUSE_LEAVE,mouseLeaveHandler);
  190.          if(!getFocus())
  191.          {
  192.             setFocus();
  193.          }
  194.       }
  195.       
  196.       public function mouseMoveHandler(param1:MouseEvent) : void
  197.       {
  198.          var _loc2_:DragEvent = null;
  199.          var _loc3_:DisplayObject = null;
  200.          var _loc4_:int = 0;
  201.          var _loc12_:Boolean = false;
  202.          var _loc13_:IUIComponent = null;
  203.          lastMouseEvent = param1;
  204.          var _loc5_:Point = new Point();
  205.          var _loc6_:Point = new Point(param1.localX,param1.localY);
  206.          _loc6_ = DisplayObject(param1.target).localToGlobal(_loc6_);
  207.          _loc6_ = DisplayObject(dragInitiator.systemManager.topLevelSystemManager).globalToLocal(_loc6_);
  208.          var _loc7_:Number = _loc6_.x;
  209.          var _loc8_:Number = _loc6_.y;
  210.          x = _loc7_ - xOffset;
  211.          y = _loc8_ - yOffset;
  212.          if(!param1)
  213.          {
  214.             return;
  215.          }
  216.          var _loc9_:Array = DisplayObjectContainer(dragInitiator.systemManager.topLevelSystemManager).getObjectsUnderPoint(new Point(_loc7_,_loc8_));
  217.          var _loc10_:DisplayObject = null;
  218.          var _loc11_:int = int(_loc9_.length - 1);
  219.          while(_loc11_ >= 0)
  220.          {
  221.             _loc10_ = _loc9_[_loc11_];
  222.             if(_loc10_ != this && !contains(_loc10_))
  223.             {
  224.                break;
  225.             }
  226.             _loc11_--;
  227.          }
  228.          if(target)
  229.          {
  230.             _loc12_ = false;
  231.             _loc13_ = target;
  232.             _loc3_ = _loc10_;
  233.             while(_loc3_)
  234.             {
  235.                if(_loc3_ == target)
  236.                {
  237.                   dispatchDragEvent(DragEvent.DRAG_OVER,param1,_loc3_);
  238.                   _loc12_ = true;
  239.                   break;
  240.                }
  241.                dispatchDragEvent(DragEvent.DRAG_ENTER,param1,_loc3_);
  242.                if(target == _loc3_)
  243.                {
  244.                   _loc12_ = false;
  245.                   break;
  246.                }
  247.                _loc3_ = _loc3_.parent;
  248.             }
  249.             if(!_loc12_)
  250.             {
  251.                dispatchDragEvent(DragEvent.DRAG_EXIT,param1,_loc13_);
  252.                if(target == _loc13_)
  253.                {
  254.                   target = null;
  255.                }
  256.             }
  257.          }
  258.          if(!target)
  259.          {
  260.             action = DragManager.MOVE;
  261.             _loc3_ = _loc10_;
  262.             while(_loc3_)
  263.             {
  264.                if(_loc3_ != this)
  265.                {
  266.                   dispatchDragEvent(DragEvent.DRAG_ENTER,param1,_loc3_);
  267.                   if(target)
  268.                   {
  269.                      break;
  270.                   }
  271.                }
  272.                _loc3_ = _loc3_.parent;
  273.             }
  274.             if(!target)
  275.             {
  276.                action = DragManager.NONE;
  277.             }
  278.          }
  279.          showFeedback();
  280.       }
  281.       
  282.       private function dispatchDragEvent(param1:String, param2:MouseEvent, param3:Object) : void
  283.       {
  284.          var _loc4_:DragEvent = new DragEvent(param1);
  285.          var _loc5_:Point = new Point();
  286.          _loc4_.dragInitiator = dragInitiator;
  287.          _loc4_.dragSource = dragSource;
  288.          _loc4_.action = action;
  289.          _loc4_.ctrlKey = param2.ctrlKey;
  290.          _loc4_.altKey = param2.altKey;
  291.          _loc4_.shiftKey = param2.shiftKey;
  292.          _loc5_.x = lastMouseEvent.localX;
  293.          _loc5_.y = lastMouseEvent.localY;
  294.          _loc5_ = DisplayObject(lastMouseEvent.target).localToGlobal(_loc5_);
  295.          _loc5_ = DisplayObject(param3).globalToLocal(_loc5_);
  296.          _loc4_.localX = _loc5_.x;
  297.          _loc4_.localY = _loc5_.y;
  298.          param3.dispatchEvent(_loc4_);
  299.       }
  300.       
  301.       override protected function keyUpHandler(param1:KeyboardEvent) : void
  302.       {
  303.          checkKeyEvent(param1);
  304.       }
  305.       
  306.       private function effectEndHandler(param1:EffectEvent) : void
  307.       {
  308.          DragManager.mx_internal::endDrag();
  309.       }
  310.       
  311.       public function checkKeyEvent(param1:KeyboardEvent) : void
  312.       {
  313.          var _loc2_:DragEvent = null;
  314.          var _loc3_:Point = null;
  315.          if(target)
  316.          {
  317.             if(lastKeyEvent && param1.type == lastKeyEvent.type && param1.keyCode == lastKeyEvent.keyCode)
  318.             {
  319.                return;
  320.             }
  321.             lastKeyEvent = param1;
  322.             _loc2_ = new DragEvent(DragEvent.DRAG_OVER);
  323.             _loc2_.dragInitiator = dragInitiator;
  324.             _loc2_.dragSource = dragSource;
  325.             _loc2_.action = action;
  326.             _loc2_.ctrlKey = param1.ctrlKey;
  327.             _loc2_.altKey = param1.altKey;
  328.             _loc2_.shiftKey = param1.shiftKey;
  329.             _loc3_ = new Point();
  330.             _loc3_.x = lastMouseEvent.localX;
  331.             _loc3_.y = lastMouseEvent.localY;
  332.             _loc3_ = DisplayObject(lastMouseEvent.target).localToGlobal(_loc3_);
  333.             _loc3_ = DisplayObject(target).globalToLocal(_loc3_);
  334.             _loc2_.localX = _loc3_.x;
  335.             _loc2_.localY = _loc3_.y;
  336.             target.dispatchEvent(_loc2_);
  337.             showFeedback();
  338.          }
  339.       }
  340.       
  341.       public function mouseLeaveHandler(param1:Event) : void
  342.       {
  343.          mouseUpHandler(lastMouseEvent);
  344.       }
  345.       
  346.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  347.       {
  348.          checkKeyEvent(param1);
  349.       }
  350.       
  351.       public function stage_mouseMoveHandler(param1:MouseEvent) : void
  352.       {
  353.          if(param1.target != stage)
  354.          {
  355.             return;
  356.          }
  357.          mouseMoveHandler(param1);
  358.       }
  359.    }
  360. }
  361.  
  362.